package com.reconcile.phone.common.helper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.reconcile.phone.common.utils.StringUtils;

/**
 * 查询条件构造 wrapper 助手
 *
 * @author lly
 * @create 2024/1/22 16:59
 */
public class WrapperHelper {

    /**
     * 构建经纬度坐标距离查询语句
     *
     * @param lat   经度坐标
     * @param lng   维度坐标
     * @param isAll 是否查询所有字段
     * @param <T>   泛型
     * @return 已经构建好的查询距离字段语句
     */
    public static <T> LambdaQueryWrapper<T> buildDistanceWrapper(String lat, String lng, Boolean isAll) {
        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(lat) && StringUtils.isNotBlank(lng)) {
            String sql = "st_distance_sphere(point(" + lng + "," + lat + "),point(lng,lat)) as distance";
            if (isAll) {
                sql = "*," + sql;
            }
            queryWrapper.select(sql);
        }
        return queryWrapper.lambda();
    }

    /**
     * 构建经纬度坐标距离查询语句(坐标保留两位小数：四舍五入)
     *
     * @param lat   经度坐标
     * @param lng   维度坐标
     * @param isAll 是否查询所有字段
     * @param <T>   泛型
     * @return 已经构建好的查询距离字段语句
     */
    public static <T> LambdaQueryWrapper<T> buildFormatDistanceWrapper(String lat, String lng, Boolean isAll) {
        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(lat) && StringUtils.isNotBlank(lng)) {
            String sql = "TRUNCATE(st_distance_sphere(point(" + lng + "," + lat + "),point(lng,lat)),2) as distance";
            if (isAll) {
                sql = "*," + sql;
            }
            queryWrapper.select(sql);
        }
        return queryWrapper.lambda();
    }
}
